High-Performance Computing (“HPC”) applications are increasingly being used in academia and laboratories for scientific research and in industries for business and analytics. These applications may run on a variety of platforms such as, for example, supercomputers, clusters, and the cloud, and are used in fields as diverse as medical imaging, financial services, molecular biology, energy, cosmology, geophysics, manufacturing, and data warehousing, among others. A common challenge affecting HPC applications is their need to accelerate the processing of vast amounts of data (e.g., in the teraflops or petaflops) among multiple processors or processor cores working in parallel.
HPC users typically have access to platforms of varying resources, such as servers with different processor types and speed, different interconnection networks, and with or without virtualization. The platforms may also have different charging rates and models, with some freely available and others charging the users for compute capacity per hour. In addition, as platforms are moving into a world of hybrid clouds and deployments, a part of the computing resources may be under user's control and another part may be in the cloud. As a result, the number of choices available to HPC users when selecting a platform or platforms to run their HPC applications can be daunting. Existing HPC scheduling systems are not designed to deal with those choices. Hence, HPC users are faced with the challenge of choosing a platform to run a given HPC application based upon limited knowledge of application characteristics, platform capabilities, and users' preferences (e.g., QoS, cost, sustainability, and so on). Selecting a platform to run a given HPC application therefore remains one of the key challenges faced by HPC users today.